草庐IT

C++11 auto 和 size_type

全部标签

c++ - 将 vector size() 带出循环条件进行优化

fibs是一个std::vector。使用g++,我被建议将fibs.size()带出循环,以节省每次计算它(因为vector可能会改变)intsum=0;for(inti=0;i当然,编译器中有一些数据流分析会告诉我们fib不会改变大小。在那儿?或者我应该将其他一些变量设置为fibs.size()并在循环条件中使用它吗? 最佳答案 编译器可能会确定它不会改变。即使是这样,vector的size()也是一个O(1)操作。 关于c++-将vectorsize()带出循环条件进行优化,我们在

c++ - C++11 中的默认构造函数、POD 的初始化和隐式类型转换

我刚看了Chandler在GoingNative2012上关于Clang的演讲。他展示了以下代码:#includestructS{intn;};structX{X(int){};};voidf(void*){std::cerrChandler指出,这为c++11调用了f(void*),为c++03调用了f(X)。他还指出,原因是S().n默认初始化为0,使其成为nullptr常量。首先,我假设成员变量n的零初始化依赖于编译器实现并且不受标准保证(或者这是否随c++11发生了变化)?Chandler暗示这是由于支持常量表达式,但我仍然不能完全理解他的推理。其次,为什么f(X)会被C++0

C++11:可变同质非 POD 模板函数参数?

在C++11中,您将如何编写一个采用可变数量的同类非POD函数参数的模板函数?例如,假设我们想为定义小于“operator//pseduo-code...templateTmin(Tx1,Tx2,...,Txn){Tlowest=x1;for(Tx:{x2,...,xn})if(x上面是非法的C++11,你怎么写才合法? 最佳答案 均匀?只需使用std::initializer_list。templateTmin_impl(std::initializer_listvalues){return*std::min_element(va

c++ - GCC C++11 条件变量等待内部机制

我正在寻找我们遇到的一个错误,一些困惑的线程/条件变量类被更新为使用C++11线程。在搜寻过程中,我在GCC代码库中遇到了以下内容:templatevoidwait(_Lock&__lock){unique_lock__my_lock(_M_mutex);_Unlock__unlock(__lock);//_M_mutexmustbeunlockedbeforere-locking__locksomove//ownershipof_M_mutexlocktoanobjectwithshorterlifetime.unique_lock__my_lock2(std::move(__my_

C++11 统一初始化 : Field initializer is not constant

我正在尝试像这样实例化一组字符串:classPOI{public:...staticconststd::setTYPES{"restaurant","education","financial","health","culture","other"};...}现在,当我这样做时,我得到了这些错误(全部在这一行):error:fieldinitializerisnotconstantstaticconststd::setTYPES{"restaurant","education","financial","health","culture","other"};error:in-class

C++11 基于范围的循环 : How does it really work

我知道这个循环是如何工作的,以及我如何在实际问题中使用它。但我想知道幕后发生了什么。我认为这个循环类似于常规的for循环,例如for(inti=0;i变量i只初始化一次,所以我认为这对于基于范围的循环也是一样的。但是如果我写这段代码:for(constintx:vec){cout编译器允许我这样做,但我不明白这是怎么可能的。如果变量x是const,为什么在每次迭代中x值都不同? 最佳答案 循环的每次迭代都会创建一个局部变量x并将其初始化为vec的下一个元素。当循环迭代结束时,x超出范围。单个x永远不会被修改。参见thislink为了

c++ - C++ 中 vector 的 .size() 到底做了什么?

换句话说,.size()是在调用时计算vector对象的每个元素并返回此值,还是vector对象有一个(size_t?)成员保存vector中当前元素的数量,并且该成员的值由.size()返回? 最佳答案 对std::vector::size的调用究竟做什么取决于标准库的特定实现。但是,该标准对它能做什么和不能做什么设置了一些约束。特别是,它需要调用size才能在恒定时间内执行,这意味着它无法对元素进行计数(这与容器大小成线性关系,而不是常数)。一个vector的实现需要一个指向vector开头的指针,然后是另外两条信息:vecto

C++11 线程不适用于虚拟成员函数

我试图让一个类运行一个线程,该线程将在一个循环中调用一个名为Tick()的虚拟成员函数。然后我尝试派生一个类并覆盖base::Tick()。但是在执行的时候,程序只是调用了基类的Tick,而不是覆盖一个。有什么解决办法吗?#include#include#include#includeusingnamespacestd;classRunnable{public:Runnable():running_(ATOMIC_VAR_INIT(false)){}~Runnable(){if(running_)thread_.join();}voidStop(){if(std::atomic_exc

c++ - C2556 : overloaded function differs only by return type

我正在阅读EffectiveC++,它告诉我“可以重载仅因常量不同而不同的成员函数”。书中的例子是:classTextBlock{public:constchar&operator[](std::size_tposition)const;char&operator[](std::size_tposition);private:std::stringtext;}我下面的示例使用了一个存储指针。classA{public:A(int*val):val_(val){}int*get_message(){returnval_;}constint*get_message(){returnval_

C++ 错误 : deduced conflicting types for parameter 'T' string vs const char *

因此,我正在为双端队列容器编写一个简单的模板化搜索函数。这是代码:templatevoidsearchInDequeFor(std::dequeDeque,TsearchValue){for(constauto&element:Deque){if(Deque.empty()){std::cout下面是我在main中调用函数的方式:dequemyDeque={"apple","banana","pear","blueberry"};searchInDequeFor(myDeque,"pear");这是我遇到的错误:candidatetemplateignored:deducedconfl